package com.code.test.ali;

import java.util.HashSet;
import java.util.Set;

/**
 * 最长无重复子串
 * https://leetcode.cn/problems/longest-substring-without-repeating-characters/、
 */
public class TCode3 {

    public static void main(String[] args) {
        String input = "abcabcbb";

        System.out.println(maxLengthOfRepeat(input));
    }

    /**
     * 输入一个字符串，检测最长无重复的子串
     * 所以需要有一个set来保存每个字符
     * 当检测到重复后，往下走，相当于一个滑动窗口，持续记录子串的长度
     * return 子串长度
     */

    public static int maxLengthOfRepeat(String input) {
        Set<Character> set = new HashSet<>();
        int start = 0;
        int end = 0;
        int maxLen = 0;
        int n = input.length();
        while (start < n && end < n) {
            Character ch = input.charAt(end);
            if (!set.contains(ch)) {
                set.add(ch);
                end++;
                maxLen = Math.max(maxLen, end - start);
            } else {
                set.remove(input.charAt(start));
                //已经存在
                start++;
            }
        }
        return maxLen;
    }
}
